package com.itheima.mapper;

import com.itheima.annotation.AutoFill;
import com.itheima.dto.RoleDTO;
import com.itheima.entity.MenuChildren;
import com.itheima.entity.Role;
import com.itheima.enumeration.OperationDateType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface SysRoleMapper {
    /**
     * 页面查询角色
     *
     * @param name 名称
     * @return {@link List}<{@link Role}>
     */
    List<Role> pageQueryRole(String name);

    /**
     * 按id选择角色菜单
     *
     * @param roleId 角色id
     * @return {@link String}
     */
    @Select("select group_concat(menu_id) from sys_role_menu where role_id=#{roleId}")
    String selectRoleMenusById(String roleId);

    /**
     * 查询所有角色
     *
     * @return {@link List}<{@link Role}>
     */
    @Select("select id, name, description, create_date, update_date, remarks, del_flag, superadmin, default_data from sys_role")
    List<Role> queryAllRoles();

    /**
     * 选择按名称计数
     *
     * @param name 名称
     * @return {@link Integer}
     */
    Integer selectCountByName(String name);

    /**
     * 创造角色
     *
     * @param role 角色
     */
    @AutoFill(OperationDateType.INSERT)
    void creatRole(Role role);

    /**
     * 创建角色菜单
     *
     * @param roleId  角色id
     * @param menuids 菜单
     */
    void creatRoleMenuid(String roleId, List<Integer> menuids);

    /**
     * 删除角色
     *
     * @param id id
     */
    void deleteRole(String id);

    /**
     * 删除角色菜单
     *
     * @param id id
     */
    void deleteRoleMenu(String id);

    /**
     * 按id选择角色
     *
     * @param id id
     * @return {@link Role}
     */
    @Select("select id, name, description, create_date, update_date, remarks, del_flag, superadmin, default_data from sys_role where id=#{id}")
    Role selectRoleById(String id);

    /**
     * 由父亲pid选择
     *
     * @param i  我
     * @param id id
     * @return {@link List}<{@link MenuChildren}>
     */
    @Select("select sys_menu.id, sys_menu.pid, sys_menu.path, sys_menu.component, sys_menu.title, sys_menu.icon, " +
            "sys_menu.is_show, sys_menu.is_cache, sys_menu.is_link, sys_menu.redirect, sys_menu.create_date, " +
            "sys_menu.update_date, sys_menu.del_flag, sys_menu.type, sys_menu.sort, sys_menu.mark " +
            "from sys_menu,sys_role,sys_role_menu where sys_menu.id=sys_role_menu.menu_id and sys_role.id=sys_role_menu.role_id  and sys_menu.pid=#{i} and sys_role.id=#{id}")
    List<MenuChildren> selectByFatherPid(int i, String id);

    /**
     * 按名称选择存在计数
     *
     * @param roleDTO 角色d去
     * @return {@link Integer}
     */
    Integer selectExistsCountByName(RoleDTO roleDTO);

    /**
     * 更新角色
     *
     * @param role 角色
     */
    @AutoFill(OperationDateType.UPDATE)
    void updateRole(Role role);
}
